pyegeria 5.4.0.28__py3-none-any.whl → 5.5.3.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pyegeria might be problematic. Click here for more details.
- commands/__init__.py +24 -0
- commands/cat/Dr-Egeria_md-orig.py +2 -2
- commands/cat/collection_actions.py +197 -0
- commands/cat/dr_egeria_command_help.py +137 -38
- commands/cat/dr_egeria_jupyter.py +7 -7
- commands/cat/dr_egeria_md.py +10 -267
- commands/cat/exp_list_glossaries.py +11 -14
- commands/cat/get_asset_graph.py +37 -267
- commands/cat/{get_collection.py → get_collection_tree.py} +10 -18
- commands/cat/get_project_dependencies.py +14 -14
- commands/cat/get_project_structure.py +15 -14
- commands/cat/get_tech_type_elements.py +16 -116
- commands/cat/glossary_actions.py +145 -298
- commands/cat/list_assets.py +3 -11
- commands/cat/list_cert_types.py +17 -63
- commands/cat/list_collections.py +17 -139
- commands/cat/list_deployed_catalogs.py +15 -27
- commands/cat/list_deployed_database_schemas.py +27 -43
- commands/cat/list_deployed_databases.py +16 -31
- commands/cat/list_deployed_servers.py +35 -54
- commands/cat/list_glossaries.py +18 -17
- commands/cat/list_projects.py +10 -12
- commands/cat/list_tech_type_elements.py +21 -37
- commands/cat/list_tech_types.py +13 -25
- commands/cat/list_terms.py +38 -79
- commands/cat/list_todos.py +4 -11
- commands/cat/list_user_ids.py +3 -10
- commands/cat/my_reports.py +559 -0
- commands/cat/run_report.py +394 -0
- commands/cat/{list_format_set.py → run_report_orig.py} +136 -44
- commands/cli/egeria.py +182 -219
- commands/cli/egeria_cat.py +32 -59
- commands/cli/egeria_my.py +13 -0
- commands/cli/egeria_ops.py +69 -74
- commands/cli/egeria_tech.py +17 -93
- commands/{cat → deprecated}/list_data_designer.py +2 -4
- commands/{cat → deprecated}/list_data_structures_full.py +3 -6
- commands/deprecated/old_get_asset_graph.py +315 -0
- commands/my/__init__.py +0 -2
- commands/my/list_my_profile.py +27 -34
- commands/my/list_my_roles.py +1 -7
- commands/my/monitor_my_todos.py +1 -7
- commands/my/monitor_open_todos.py +6 -7
- commands/my/todo_actions.py +4 -5
- commands/ops/__init__.py +0 -2
- commands/ops/gov_server_actions.py +17 -21
- commands/ops/list_archives.py +17 -38
- commands/ops/list_catalog_targets.py +33 -40
- commands/ops/load_archive.py +14 -11
- commands/ops/{monitor_engine_activity_c.py → monitor_active_engine_activity.py} +51 -82
- commands/ops/{monitor_integ_daemon_status.py → monitor_daemon_status.py} +35 -55
- commands/ops/monitor_engine_activity.py +79 -77
- commands/ops/{monitor_gov_eng_status.py → monitor_engine_status.py} +10 -7
- commands/ops/monitor_platform_status.py +38 -50
- commands/ops/monitor_server_startup.py +6 -11
- commands/ops/monitor_server_status.py +7 -11
- commands/ops/orig_monitor_server_list.py +8 -8
- commands/ops/orig_monitor_server_status.py +1 -5
- commands/ops/refresh_integration_daemon.py +5 -5
- commands/ops/restart_integration_daemon.py +5 -5
- commands/ops/table_integ_daemon_status.py +6 -6
- commands/ops/x_engine_actions.py +7 -7
- commands/tech/__init__.py +0 -2
- commands/tech/{generic_actions.py → element_actions.py} +6 -11
- commands/tech/get_element_info.py +20 -29
- commands/tech/get_guid_info.py +23 -42
- commands/tech/get_tech_details.py +20 -35
- commands/tech/get_tech_type_template.py +28 -39
- commands/tech/list_all_om_type_elements.py +24 -30
- commands/tech/list_all_om_type_elements_x.py +22 -28
- commands/tech/list_all_related_elements.py +19 -28
- commands/tech/list_anchored_elements.py +22 -30
- commands/tech/list_asset_types.py +19 -24
- commands/tech/list_elements_by_classification_by_property_value.py +26 -32
- commands/tech/list_elements_by_property_value.py +19 -25
- commands/tech/list_elements_by_property_value_x.py +20 -28
- commands/tech/list_elements_for_classification.py +28 -41
- commands/tech/list_gov_action_processes.py +16 -27
- commands/tech/list_information_supply_chains.py +22 -30
- commands/tech/list_registered_services.py +14 -26
- commands/tech/list_related_elements_with_prop_value.py +15 -25
- commands/tech/list_related_specification.py +1 -4
- commands/tech/list_relationship_types.py +15 -25
- commands/tech/list_relationships.py +20 -36
- commands/tech/list_solution_blueprints.py +28 -33
- commands/tech/list_solution_components.py +23 -29
- commands/tech/list_solution_roles.py +21 -32
- commands/tech/list_tech_templates.py +51 -54
- commands/tech/list_valid_metadata_values.py +5 -9
- commands/tech/table_tech_templates.py +2 -6
- commands/tech/x_list_related_elements.py +1 -4
- examples/GeoSpatial Products Example.py +524 -0
- examples/Jupyter Notebooks/P-egeria-server-config.ipynb +2137 -0
- examples/Jupyter Notebooks/README.md +2 -0
- examples/Jupyter Notebooks/common/P-environment-check.ipynb +115 -0
- examples/Jupyter Notebooks/common/__init__.py +14 -0
- examples/Jupyter Notebooks/common/common-functions.ipynb +4694 -0
- examples/Jupyter Notebooks/common/environment-check.ipynb +52 -0
- examples/Jupyter Notebooks/common/globals.ipynb +184 -0
- examples/Jupyter Notebooks/common/globals.py +154 -0
- examples/Jupyter Notebooks/common/orig_globals.py +152 -0
- examples/format_sets/all_format_sets.json +910 -0
- examples/format_sets/custom_format_sets.json +268 -0
- examples/format_sets/subset_format_sets.json +187 -0
- examples/format_sets_save_load_example.py +291 -0
- examples/jacquard_data_sets.py +129 -0
- examples/output_formats_example.py +193 -0
- examples/test_jacquard_data_sets.py +54 -0
- examples/test_jacquard_data_sets_scenarios.py +94 -0
- md_processing/__init__.py +33 -24
- md_processing/command_dispatcher.py +33 -0
- md_processing/command_mapping.py +221 -0
- md_processing/data/commands/commands_data_designer.json +537 -0
- md_processing/data/commands/commands_external_reference.json +733 -0
- md_processing/data/commands/commands_feedback.json +155 -0
- md_processing/data/commands/commands_general.json +204 -0
- md_processing/data/commands/commands_glossary.json +218 -0
- md_processing/data/commands/commands_governance.json +3678 -0
- md_processing/data/commands/commands_product_manager.json +865 -0
- md_processing/data/commands/commands_project.json +642 -0
- md_processing/data/commands/commands_solution_architect.json +366 -0
- md_processing/data/commands.json +6489 -30060
- md_processing/data/{commands-working.json → commands_working.json} +9304 -13513
- md_processing/data/gened_report_specs.py +6584 -0
- md_processing/data/generated_format_sets.json +6533 -0
- md_processing/data/generated_format_sets_old.json +4137 -0
- md_processing/data/generated_format_sets_old.py +45 -0
- md_processing/dr_egeria.py +182 -0
- md_processing/md_commands/data_designer_commands.py +195 -583
- md_processing/md_commands/ext_ref_commands.py +530 -0
- md_processing/md_commands/feedback_commands.py +726 -0
- md_processing/md_commands/glossary_commands.py +106 -490
- md_processing/md_commands/governance_officer_commands.py +129 -18
- md_processing/md_commands/product_manager_commands.py +362 -115
- md_processing/md_commands/project_commands.py +351 -134
- md_processing/md_commands/solution_architect_commands.py +276 -232
- md_processing/md_commands/view_commands.py +295 -0
- md_processing/md_processing_utils/common_md_proc_utils.py +258 -166
- md_processing/md_processing_utils/common_md_utils.py +138 -43
- md_processing/md_processing_utils/determine_width.py +103 -0
- md_processing/md_processing_utils/extraction_utils.py +100 -39
- md_processing/md_processing_utils/gen_report_specs.py +643 -0
- md_processing/md_processing_utils/generate_dr_help.py +61 -33
- md_processing/md_processing_utils/generate_md_cmd_templates.py +20 -19
- md_processing/md_processing_utils/generate_md_templates.py +3 -12
- md_processing/md_processing_utils/md_processing_constants.py +1053 -72
- pyegeria/__init__.py +203 -158
- pyegeria/core/__init__.py +40 -0
- pyegeria/core/_base_platform_client.py +574 -0
- pyegeria/core/_base_server_client.py +573 -0
- pyegeria/{_exceptions_new.py → core/_exceptions.py} +62 -30
- pyegeria/{_globals.py → core/_globals.py} +14 -3
- pyegeria/core/_server_client.py +6073 -0
- pyegeria/{_validators.py → core/_validators.py} +7 -8
- pyegeria/core/config.py +654 -0
- pyegeria/{create_tech_guid_lists.py → core/create_tech_guid_lists.py} +0 -1
- pyegeria/core/load_config.py +37 -0
- pyegeria/{logging_configuration.py → core/logging_configuration.py} +1 -1
- pyegeria/core/mcp_adapter.py +144 -0
- pyegeria/core/mcp_server.py +212 -0
- pyegeria/core/utils.py +405 -0
- pyegeria/{_client.py → deprecated/_client.py} +24 -25
- pyegeria/{_deprecated_gov_engine.py → deprecated/_deprecated_gov_engine.py} +16 -16
- pyegeria/{classification_manager_omvs.py → deprecated/classification_manager_omvs.py} +1987 -1877
- pyegeria/{output_formatter.py → deprecated/output_formatter_with_machine_keys.py} +298 -45
- pyegeria/{runtime_manager_omvs.py → deprecated/runtime_manager_omvs.py} +155 -171
- pyegeria/{valid_metadata_omvs.py → deprecated/valid_metadata_omvs.py} +93 -93
- pyegeria/{x_action_author_omvs.py → deprecated/x_action_author_omvs.py} +2 -3
- pyegeria/egeria_cat_client.py +26 -70
- pyegeria/egeria_client.py +130 -93
- pyegeria/egeria_config_client.py +40 -46
- pyegeria/egeria_tech_client.py +141 -54
- pyegeria/models/__init__.py +150 -0
- pyegeria/{models.py → models/models.py} +156 -20
- pyegeria/omvs/__init__.py +84 -0
- pyegeria/omvs/action_author.py +342 -0
- pyegeria/omvs/actor_manager.py +5980 -0
- pyegeria/omvs/asset_catalog.py +842 -0
- pyegeria/omvs/asset_maker.py +2736 -0
- pyegeria/omvs/automated_curation.py +4403 -0
- pyegeria/omvs/classification_manager.py +11213 -0
- pyegeria/{collection_manager.py → omvs/collection_manager.py} +1334 -1160
- pyegeria/omvs/community_matters_omvs.py +468 -0
- pyegeria/{core_omag_server_config.py → omvs/core_omag_server_config.py} +157 -157
- pyegeria/{data_designer.py → omvs/data_designer.py} +1115 -660
- pyegeria/omvs/data_discovery.py +869 -0
- pyegeria/omvs/data_engineer.py +372 -0
- pyegeria/omvs/digital_business.py +1133 -0
- pyegeria/omvs/external_links.py +1752 -0
- pyegeria/omvs/feedback_manager.py +834 -0
- pyegeria/{full_omag_server_config.py → omvs/full_omag_server_config.py} +73 -69
- pyegeria/{glossary_manager.py → omvs/glossary_manager.py} +857 -519
- pyegeria/{governance_officer.py → omvs/governance_officer.py} +964 -468
- pyegeria/omvs/lineage_linker.py +314 -0
- pyegeria/omvs/location_arena.py +1525 -0
- pyegeria/omvs/metadata_expert.py +668 -0
- pyegeria/omvs/metadata_explorer_omvs.py +2943 -0
- pyegeria/omvs/my_profile.py +1042 -0
- pyegeria/omvs/notification_manager.py +358 -0
- pyegeria/omvs/people_organizer.py +394 -0
- pyegeria/{platform_services.py → omvs/platform_services.py} +113 -193
- pyegeria/omvs/product_manager.py +1825 -0
- pyegeria/omvs/project_manager.py +1907 -0
- pyegeria/omvs/reference_data.py +1140 -0
- pyegeria/omvs/registered_info.py +334 -0
- pyegeria/omvs/runtime_manager.py +2817 -0
- pyegeria/omvs/schema_maker.py +446 -0
- pyegeria/{server_operations.py → omvs/server_operations.py} +27 -26
- pyegeria/{solution_architect_omvs.py → omvs/solution_architect.py} +1886 -1505
- pyegeria/omvs/specification_properties.py +37 -0
- pyegeria/omvs/subject_area.py +1042 -0
- pyegeria/omvs/template_manager_omvs.py +236 -0
- pyegeria/omvs/time_keeper.py +1761 -0
- pyegeria/omvs/valid_metadata.py +3221 -0
- pyegeria/omvs/valid_metadata_lists.py +37 -0
- pyegeria/omvs/valid_type_lists.py +37 -0
- pyegeria/view/__init__.py +28 -0
- pyegeria/{_output_format_models.py → view/_output_format_models.py} +160 -24
- pyegeria/view/_output_formats.py +14 -0
- pyegeria/view/base_report_formats.py +2719 -0
- pyegeria/view/dr_egeria_reports.py +56 -0
- pyegeria/view/format_set_executor.py +397 -0
- pyegeria/{md_processing_utils.py → view/md_processing_utils.py} +5 -5
- pyegeria/{mermaid_utilities.py → view/mermaid_utilities.py} +2 -154
- pyegeria/view/output_formatter.py +1297 -0
- pyegeria-5.5.3.3.dist-info/METADATA +218 -0
- pyegeria-5.5.3.3.dist-info/RECORD +241 -0
- {pyegeria-5.4.0.28.dist-info → pyegeria-5.5.3.3.dist-info}/WHEEL +2 -1
- pyegeria-5.5.3.3.dist-info/entry_points.txt +103 -0
- pyegeria-5.5.3.3.dist-info/top_level.txt +4 -0
- commands/cat/.DS_Store +0 -0
- commands/cat/.env +0 -8
- commands/cat/README.md +0 -16
- commands/cat/debug_log +0 -1126
- commands/cat/debug_log.2025-08-18_11-34-38_088636.zip +0 -0
- commands/cat/list_categories.py +0 -192
- commands/cat/logs/pyegeria.log +0 -4
- commands/cli/debug_log +0 -0
- commands/cli/debug_log.log +0 -0
- commands/cli/txt_custom_v2.tcss +0 -19
- commands/my/README.md +0 -17
- commands/ops/README.md +0 -24
- commands/ops/logs/pyegeria.log +0 -0
- commands/ops/monitor_asset_events.py +0 -108
- commands/tech/README.md +0 -24
- md_processing/.DS_Store +0 -0
- md_processing/dr-egeria-outbox/Collections-2025-08-12-13-30-37.md +0 -163
- md_processing/dr-egeria-outbox/Collections-2025-08-12-13-35-58.md +0 -474
- md_processing/dr_egeria_inbox/Derive-Dr-Gov-Defs.md +0 -8
- md_processing/dr_egeria_inbox/Dr.Egeria Templates.md +0 -873
- md_processing/dr_egeria_inbox/arch_test.md +0 -57
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro.md +0 -254
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro_more_terms.md +0 -696
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part1.md +0 -254
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part2.md +0 -298
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part3.md +0 -608
- md_processing/dr_egeria_inbox/archive/dr_egeria_intro_part4.md +0 -94
- md_processing/dr_egeria_inbox/archive/freddie_intro.md +0 -284
- md_processing/dr_egeria_inbox/archive/freddie_intro_orig.md +0 -275
- md_processing/dr_egeria_inbox/archive/test-term.md +0 -110
- md_processing/dr_egeria_inbox/cat_test.md +0 -100
- md_processing/dr_egeria_inbox/collections.md +0 -39
- md_processing/dr_egeria_inbox/data_designer_debug.log +0 -6
- md_processing/dr_egeria_inbox/data_designer_out.md +0 -60
- md_processing/dr_egeria_inbox/data_designer_search_test.md +0 -11
- md_processing/dr_egeria_inbox/data_field.md +0 -54
- md_processing/dr_egeria_inbox/data_spec.md +0 -77
- md_processing/dr_egeria_inbox/data_spec_test.md +0 -2406
- md_processing/dr_egeria_inbox/data_test.md +0 -179
- md_processing/dr_egeria_inbox/data_test2.md +0 -429
- md_processing/dr_egeria_inbox/data_test3.md +0 -462
- md_processing/dr_egeria_inbox/dr_egeria_data_designer_1.md +0 -124
- md_processing/dr_egeria_inbox/dr_egeria_intro_categories.md +0 -168
- md_processing/dr_egeria_inbox/dr_egeria_intro_part1.md +0 -280
- md_processing/dr_egeria_inbox/dr_egeria_intro_part2.md +0 -318
- md_processing/dr_egeria_inbox/dr_egeria_intro_part3.md +0 -1073
- md_processing/dr_egeria_inbox/dr_egeria_isc1.md +0 -44
- md_processing/dr_egeria_inbox/generated_help_report.md +0 -9
- md_processing/dr_egeria_inbox/glossary_creation_experiment.ipynb +0 -341
- md_processing/dr_egeria_inbox/glossary_list.md +0 -5
- md_processing/dr_egeria_inbox/glossary_search_test.md +0 -40
- md_processing/dr_egeria_inbox/glossary_test1.md +0 -324
- md_processing/dr_egeria_inbox/gov_def.md +0 -482
- md_processing/dr_egeria_inbox/gov_def2.md +0 -447
- md_processing/dr_egeria_inbox/img.png +0 -0
- md_processing/dr_egeria_inbox/product.md +0 -211
- md_processing/dr_egeria_inbox/rel.md +0 -8
- md_processing/dr_egeria_inbox/sb.md +0 -119
- md_processing/dr_egeria_inbox/solution-components.md +0 -136
- md_processing/dr_egeria_inbox/solution_blueprints.md +0 -118
- md_processing/dr_egeria_inbox/synonym_test.md +0 -42
- md_processing/dr_egeria_inbox/t2.md +0 -268
- md_processing/dr_egeria_outbox/.obsidian/app.json +0 -1
- md_processing/dr_egeria_outbox/.obsidian/appearance.json +0 -1
- md_processing/dr_egeria_outbox/.obsidian/community-plugins.json +0 -6
- md_processing/dr_egeria_outbox/.obsidian/core-plugins.json +0 -31
- md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/data.json +0 -10
- md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/main.js +0 -4459
- md_processing/dr_egeria_outbox/.obsidian/plugins/calendar/manifest.json +0 -10
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/data.json +0 -3
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/main.js +0 -153
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/manifest.json +0 -11
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-kanban/styles.css +0 -1
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/main.js +0 -500
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/manifest.json +0 -12
- md_processing/dr_egeria_outbox/.obsidian/plugins/obsidian-tasks-plugin/styles.css +0 -1
- md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/main.js +0 -37
- md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/manifest.json +0 -11
- md_processing/dr_egeria_outbox/.obsidian/plugins/templater-obsidian/styles.css +0 -220
- md_processing/dr_egeria_outbox/.obsidian/types.json +0 -28
- md_processing/dr_egeria_outbox/.obsidian/workspace.json +0 -220
- md_processing/dr_egeria_outbox/Untitled.canvas +0 -1
- md_processing/dr_egeria_outbox/friday/processed-2025-08-22 21:22-dr_egeria_intro_part1.md +0 -312
- md_processing/dr_egeria_outbox/friday/processed-2025-08-22 21:23-dr_egeria_intro_part1.md +0 -265
- md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:06-dr_egeria_intro_part1.md +0 -230
- md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:30-dr_egeria_intro_part1.md +0 -296
- md_processing/dr_egeria_outbox/friday/processed-2025-08-23 15:31-dr_egeria_intro_part1.md +0 -253
- md_processing/dr_egeria_outbox/friday/processed-2025-08-23 16:08-dr_egeria_intro_part2.md +0 -343
- md_processing/dr_egeria_outbox/friday/processed-2025-08-23 16:12-dr_egeria_intro_part2.md +0 -343
- md_processing/dr_egeria_outbox/monday/processed-2025-08-19 07:05-product.md +0 -426
- md_processing/dr_egeria_outbox/monday/processed-2025-08-19 07:56-product.md +0 -212
- md_processing/dr_egeria_outbox/monday/processed-2025-08-19 09:43-product.md +0 -201
- md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 14:55-product.md +0 -77
- md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 15:05-product.md +0 -75
- md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 15:11-product.md +0 -74
- md_processing/dr_egeria_outbox/sunday/processed-2025-07-20 20:40-collections.md +0 -49
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 15:00-Derive-Dr-Gov-Defs.md +0 -719
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:13-Derive-Dr-Gov-Defs.md +0 -41
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:14-Derive-Dr-Gov-Defs.md +0 -33
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 20:50-Derive-Dr-Gov-Defs.md +0 -192
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 22:08-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-17 22:10-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 08:53-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 08:54-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:03-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:06-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/thursday/processed-2025-07-18 09:10-gov_def2.md +0 -486
- md_processing/dr_egeria_outbox/tuesday/processed-2025-07-16 19:15-gov_def2.md +0 -527
- md_processing/dr_egeria_outbox/tuesday/processed-2025-07-17 12:08-gov_def2.md +0 -527
- md_processing/dr_egeria_outbox/tuesday/processed-2025-07-17 14:27-gov_def2.md +0 -485
- md_processing/dr_egeria_outbox/tuesday/processed-2025-08-19 10:55-product.md +0 -209
- md_processing/family_docs/Data Designer/Create_Data_Class.md +0 -164
- md_processing/family_docs/Data Designer/Create_Data_Dictionary.md +0 -30
- md_processing/family_docs/Data Designer/Create_Data_Field.md +0 -162
- md_processing/family_docs/Data Designer/Create_Data_Specification.md +0 -36
- md_processing/family_docs/Data Designer/Create_Data_Structure.md +0 -38
- md_processing/family_docs/Data Designer/View_Data_Classes.md +0 -78
- md_processing/family_docs/Data Designer/View_Data_Dictionaries.md +0 -78
- md_processing/family_docs/Data Designer/View_Data_Fields.md +0 -78
- md_processing/family_docs/Data Designer/View_Data_Specifications.md +0 -78
- md_processing/family_docs/Data Designer/View_Data_Structures.md +0 -78
- md_processing/family_docs/Data Designer.md +0 -842
- md_processing/family_docs/Digital Product Manager/Add_Member->Collection.md +0 -42
- md_processing/family_docs/Digital Product Manager/Attach_Collection->Resource.md +0 -36
- md_processing/family_docs/Digital Product Manager/Create_Agreement.md +0 -96
- md_processing/family_docs/Digital Product Manager/Create_Data_Sharing_Agreement.md +0 -72
- md_processing/family_docs/Digital Product Manager/Create_DigitalSubscription.md +0 -102
- md_processing/family_docs/Digital Product Manager/Create_Digital_Product.md +0 -134
- md_processing/family_docs/Digital Product Manager/Link_Agreement_Items.md +0 -60
- md_processing/family_docs/Digital Product Manager/Link_Contracts.md +0 -26
- md_processing/family_docs/Digital Product Manager/Link_Digital_Product_-_Digital_Product.md +0 -30
- md_processing/family_docs/Digital Product Manager/Link_Subscribers.md +0 -48
- md_processing/family_docs/Digital Product Manager.md +0 -668
- md_processing/family_docs/Glossary/Attach_Category_Parent.md +0 -18
- md_processing/family_docs/Glossary/Attach_Term-Term_Relationship.md +0 -26
- md_processing/family_docs/Glossary/Create_Category.md +0 -38
- md_processing/family_docs/Glossary/Create_Glossary.md +0 -42
- md_processing/family_docs/Glossary/Create_Term.md +0 -70
- md_processing/family_docs/Glossary.md +0 -206
- md_processing/family_docs/Governance Officer/Create_Business_Imperative.md +0 -106
- md_processing/family_docs/Governance Officer/Create_Certification_Type.md +0 -112
- md_processing/family_docs/Governance Officer/Create_Governance_Approach.md +0 -114
- md_processing/family_docs/Governance Officer/Create_Governance_Obligation.md +0 -114
- md_processing/family_docs/Governance Officer/Create_Governance_Principle.md +0 -114
- md_processing/family_docs/Governance Officer/Create_Governance_Procedure.md +0 -128
- md_processing/family_docs/Governance Officer/Create_Governance_Process.md +0 -122
- md_processing/family_docs/Governance Officer/Create_Governance_Processing_Purpose.md +0 -106
- md_processing/family_docs/Governance Officer/Create_Governance_Responsibility.md +0 -122
- md_processing/family_docs/Governance Officer/Create_Governance_Rule.md +0 -122
- md_processing/family_docs/Governance Officer/Create_Governance_Strategy.md +0 -106
- md_processing/family_docs/Governance Officer/Create_License_Type.md +0 -112
- md_processing/family_docs/Governance Officer/Create_Naming_Standard_Rule.md +0 -122
- md_processing/family_docs/Governance Officer/Create_Regulation_Article.md +0 -106
- md_processing/family_docs/Governance Officer/Create_Regulation_Definition.md +0 -118
- md_processing/family_docs/Governance Officer/Create_Security_Access_Control.md +0 -114
- md_processing/family_docs/Governance Officer/Create_Security_Group.md +0 -120
- md_processing/family_docs/Governance Officer/Create_Service_Level_Objectives.md +0 -122
- md_processing/family_docs/Governance Officer/Create_Threat_Definition.md +0 -106
- md_processing/family_docs/Governance Officer/Link_Governance_Controls.md +0 -32
- md_processing/family_docs/Governance Officer/Link_Governance_Drivers.md +0 -32
- md_processing/family_docs/Governance Officer/Link_Governance_Policies.md +0 -32
- md_processing/family_docs/Governance Officer/View_Governance_Definitions.md +0 -82
- md_processing/family_docs/Governance Officer.md +0 -2412
- md_processing/family_docs/Solution Architect/Create_Information_Supply_Chain.md +0 -70
- md_processing/family_docs/Solution Architect/Create_Solution_Blueprint.md +0 -44
- md_processing/family_docs/Solution Architect/Create_Solution_Component.md +0 -96
- md_processing/family_docs/Solution Architect/Create_Solution_Role.md +0 -66
- md_processing/family_docs/Solution Architect/Link_Information_Supply_Chain_Peers.md +0 -32
- md_processing/family_docs/Solution Architect/Link_Solution_Component_Peers.md +0 -32
- md_processing/family_docs/Solution Architect/View_Information_Supply_Chains.md +0 -32
- md_processing/family_docs/Solution Architect/View_Solution_Blueprints.md +0 -32
- md_processing/family_docs/Solution Architect/View_Solution_Components.md +0 -32
- md_processing/family_docs/Solution Architect/View_Solution_Roles.md +0 -32
- md_processing/family_docs/Solution Architect.md +0 -490
- md_processing/md_processing_utils/debug_log +0 -574
- md_processing/md_processing_utils/debug_log.log +0 -0
- md_processing/md_processing_utils/dr-egeria-help-2025-07-17T17:22:09.md +0 -2065
- md_processing/md_processing_utils/generated_help_terms.md +0 -842
- pyegeria/.DS_Store +0 -0
- pyegeria/README.md +0 -35
- pyegeria/_client_new.py +0 -1102
- pyegeria/_output_formats.py +0 -730
- pyegeria/asset_catalog_omvs.py +0 -864
- pyegeria/automated_curation_omvs.py +0 -3765
- pyegeria/config.py +0 -523
- pyegeria/egeria_my_client.py +0 -91
- pyegeria/feedback_manager_omvs.py +0 -4573
- pyegeria/load_config_orig.py +0 -218
- pyegeria/md_processing_helpers.py +0 -58
- pyegeria/md_processing_utils_orig.py +0 -1103
- pyegeria/metadata_explorer_omvs.py +0 -2326
- pyegeria/my_profile_omvs.py +0 -1022
- pyegeria/project_manager.py +0 -1591
- pyegeria/registered_info.py +0 -167
- pyegeria/template_manager_omvs.py +0 -1414
- pyegeria/utils.py +0 -256
- pyegeria-5.4.0.28.dist-info/METADATA +0 -77
- pyegeria-5.4.0.28.dist-info/RECORD +0 -343
- pyegeria-5.4.0.28.dist-info/entry_points.txt +0 -105
- /commands/cat/debug_log.log → /pyegeria/deprecated/__init__.py +0 -0
- /pyegeria/{_exceptions.py → deprecated/_exceptions.py} +0 -0
- /pyegeria/{collection_models.py → models/collection_models.py} +0 -0
- {pyegeria-5.4.0.28.dist-info → pyegeria-5.5.3.3.dist-info/licenses}/LICENSE +0 -0
commands/__init__.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""
|
|
2
|
+
SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
Copyright Contributors to the ODPi Egeria project.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
pyegeria md_commands available also from python.
|
|
8
|
+
"""
|
|
9
|
+
from .cat.dr_egeria_md import process_markdown_file
|
|
10
|
+
from .cat.list_deployed_catalogs import list_deployed_catalogs
|
|
11
|
+
from .cat.list_deployed_database_schemas import list_deployed_database_schemas
|
|
12
|
+
from .cat.list_deployed_databases import list_deployed_databases
|
|
13
|
+
from .cat.list_glossaries import display_glossaries
|
|
14
|
+
from .cat.list_terms import display_glossary_terms
|
|
15
|
+
from .ops.list_catalog_targets import display_catalog_targets
|
|
16
|
+
from .ops.monitor_engine_activity import display_engine_activity_c
|
|
17
|
+
from .ops.monitor_engine_status import display_gov_eng_status
|
|
18
|
+
from .ops.monitor_daemon_status import display_integration_daemon_status
|
|
19
|
+
from .ops.table_integ_daemon_status import (
|
|
20
|
+
display_integration_daemon_status as table_integ_daemon_status,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
@@ -6,8 +6,8 @@ import os
|
|
|
6
6
|
from rich import print
|
|
7
7
|
from rich.console import Console
|
|
8
8
|
|
|
9
|
-
from pyegeria.md_processing_utils import (commands,
|
|
10
|
-
|
|
9
|
+
from pyegeria.view.md_processing_utils import (commands,
|
|
10
|
+
process_provenance_command)
|
|
11
11
|
|
|
12
12
|
import click
|
|
13
13
|
from pyegeria import (extract_command, process_glossary_upsert_command, process_term_upsert_command,
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"""
|
|
2
|
+
SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
Copyright Contributors to the ODPi Egeria project.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
Execute Glossary actions.
|
|
8
|
+
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import os
|
|
12
|
+
|
|
13
|
+
import click
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
from pyegeria import (
|
|
17
|
+
EgeriaTech, body_slimmer, settings,
|
|
18
|
+
PyegeriaAPIException, PyegeriaClientException, print_basic_exception, print_exception_table
|
|
19
|
+
)
|
|
20
|
+
app_config = settings.Environment
|
|
21
|
+
|
|
22
|
+
EGERIA_USER = os.environ.get("EGERIA_USER", "erinoverview")
|
|
23
|
+
EGERIA_USER_PASSWORD = os.environ.get("EGERIA_USER_PASSWORD", "secret")
|
|
24
|
+
|
|
25
|
+
COLLECTION_TYPES = ["Collection", "Glossary", "CollectionFolder", "RootCollection", "WorkItemList", "SolutionBlueprint" ]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@click.command("add-element-to-collection")
|
|
29
|
+
@click.option("--element-guid", required=True, default = "",help="GUID of the element to add to a Collection")
|
|
30
|
+
@click.option("--collection-guid", required=True, default = "", help="GUID of the Collection to add an element to")
|
|
31
|
+
@click.option("--server", default=app_config.egeria_view_server, help="Egeria view server to use")
|
|
32
|
+
@click.option(
|
|
33
|
+
"--url", default=app_config.egeria_view_server_url, help="URL of Egeria platform to connect to"
|
|
34
|
+
)
|
|
35
|
+
@click.option("--userid", default=EGERIA_USER, help="Egeria user")
|
|
36
|
+
@click.option("--password", default=EGERIA_USER_PASSWORD, help="Egeria user password")
|
|
37
|
+
@click.option("--timeout", default=60, help="Number of seconds to wait")
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def add_element_to_collection(server, url, userid, password, timeout, element_guid, collection_guid):
|
|
41
|
+
"""Add a glossary term to a Collection"""
|
|
42
|
+
m_client = EgeriaTech(server, url, user_id=userid, user_pwd=password)
|
|
43
|
+
token = m_client.create_egeria_bearer_token()
|
|
44
|
+
try:
|
|
45
|
+
element_guid = element_guid.strip()
|
|
46
|
+
collection_guid = collection_guid.strip()
|
|
47
|
+
m_client.add_to_collection(element_guid, collection_guid)
|
|
48
|
+
|
|
49
|
+
click.echo(
|
|
50
|
+
f"Added element with GUID: {element_guid} to Collection with GUID: {collection_guid}\n"
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
except (PyegeriaAPIException, PyegeriaClientException) as e:
|
|
54
|
+
print_basic_exception(e)
|
|
55
|
+
finally:
|
|
56
|
+
m_client.close_session()
|
|
57
|
+
|
|
58
|
+
@click.command("remove-element-from-collection")
|
|
59
|
+
@click.option("--element-guid", required=True, default = "",help="GUID of the element to remove from the collection")
|
|
60
|
+
@click.option("--collection-guid", required=True, default = "", help="GUID of collection to remove the element from")
|
|
61
|
+
|
|
62
|
+
@click.option("--server", default=app_config.egeria_view_server, help="Egeria view server to use")
|
|
63
|
+
@click.option(
|
|
64
|
+
"--url", default=app_config.egeria_view_server_url, help="URL of Egeria platform to connect to"
|
|
65
|
+
)
|
|
66
|
+
@click.option("--userid", default=EGERIA_USER, help="Egeria user")
|
|
67
|
+
@click.option("--password", default=EGERIA_USER_PASSWORD, help="Egeria user password")
|
|
68
|
+
@click.option("--timeout", default=60, help="Number of seconds to wait")
|
|
69
|
+
|
|
70
|
+
def remove_element_from_collection(server, url, userid, password, timeout, element_guid, collection_guid):
|
|
71
|
+
"""Remove an element from a Collection"""
|
|
72
|
+
m_client = EgeriaTech(server, url, user_id=userid, user_pwd=password)
|
|
73
|
+
token = m_client.create_egeria_bearer_token()
|
|
74
|
+
try:
|
|
75
|
+
element_guid = element_guid.strip()
|
|
76
|
+
collection_guid = collection_guid.strip()
|
|
77
|
+
body = {
|
|
78
|
+
"class": "DeleteRelationshipRequestBody"
|
|
79
|
+
}
|
|
80
|
+
m_client.remove_from_collection( collection_guid, element_guid, body)
|
|
81
|
+
|
|
82
|
+
click.echo(
|
|
83
|
+
f"Removed term with GUID: {element_guid} from Collection with GUID: {collection_guid}\n"
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
except (PyegeriaAPIException, PyegeriaClientException) as e:
|
|
87
|
+
print_basic_exception(e)
|
|
88
|
+
finally:
|
|
89
|
+
m_client.close_session()
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@click.command("create-collection")
|
|
93
|
+
@click.option("--name", help="Collection Name",default = "", required=True)
|
|
94
|
+
@click.option("--kind", help="Kind of Collection", default = "Collection",
|
|
95
|
+
type_name = click.Choice(COLLECTION_TYPES, case_sensitive=False))
|
|
96
|
+
@click.option(
|
|
97
|
+
"--description",
|
|
98
|
+
help="Description of the Collection",
|
|
99
|
+
default="A description goes here",
|
|
100
|
+
)
|
|
101
|
+
@click.option(
|
|
102
|
+
"--category", default = "",
|
|
103
|
+
help="Category of the Collection"
|
|
104
|
+
)
|
|
105
|
+
@click.option("--server", default=app_config.egeria_view_server, help="Egeria view server to use.")
|
|
106
|
+
@click.option(
|
|
107
|
+
"--url", default=app_config.egeria_view_server_url, help="URL of Egeria platform to connect to"
|
|
108
|
+
)
|
|
109
|
+
@click.option("--userid", default=EGERIA_USER, help="Egeria user")
|
|
110
|
+
@click.option("--password", default=EGERIA_USER_PASSWORD, help="Egeria user password")
|
|
111
|
+
@click.option("--timeout", default=60, help="Number of seconds to wait")
|
|
112
|
+
def create_collection(
|
|
113
|
+
server: str,
|
|
114
|
+
url: str,
|
|
115
|
+
userid: str,
|
|
116
|
+
password: str,
|
|
117
|
+
timeout: int,
|
|
118
|
+
name: str,
|
|
119
|
+
kind: str,
|
|
120
|
+
description: str,
|
|
121
|
+
category: str,
|
|
122
|
+
) -> None:
|
|
123
|
+
"""Create a new Collection"""
|
|
124
|
+
|
|
125
|
+
try:
|
|
126
|
+
m_client = EgeriaTech(server, url, userid, password)
|
|
127
|
+
token = m_client.create_egeria_bearer_token()
|
|
128
|
+
|
|
129
|
+
collection_guid = m_client.create_collection( display_name = name, description = description, category = category,
|
|
130
|
+
prop = [kind])
|
|
131
|
+
print(f"New categry \'{name}\' created with id of \'{collection_guid}\'")
|
|
132
|
+
|
|
133
|
+
except (PyegeriaAPIException, PyegeriaClientException) as e:
|
|
134
|
+
print_basic_exception(e)
|
|
135
|
+
finally:
|
|
136
|
+
m_client.close_session()
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
@click.command("update-collection")
|
|
140
|
+
@click.option("--name", help="Collection Name", default = "",required=False)
|
|
141
|
+
@click.option("--description", default = "",help="Description of the Collection")
|
|
142
|
+
@click.option("--category", default = "", help="Category of the Collection")
|
|
143
|
+
@click.option("--server", default=app_config.egeria_view_server, help="Egeria view server to use")
|
|
144
|
+
@click.option(
|
|
145
|
+
"--url", default=app_config.egeria_view_server_url, help="URL of Egeria platform to connect to"
|
|
146
|
+
)
|
|
147
|
+
@click.option("--userid", default=EGERIA_USER, help="Egeria user")
|
|
148
|
+
@click.option("--password", default=EGERIA_USER_PASSWORD, help="Egeria user password")
|
|
149
|
+
@click.option("--timeout", default=60, help="Number of seconds to wait")
|
|
150
|
+
@click.argument("collection-guid")
|
|
151
|
+
|
|
152
|
+
def update_collection(collection_guid, name, description, category, server, url, userid, password, timeout, ):
|
|
153
|
+
"""Update the collection specified"""
|
|
154
|
+
m_client = EgeriaTech(server, url, user_id=userid, user_pwd=password)
|
|
155
|
+
token = m_client.create_egeria_bearer_token()
|
|
156
|
+
try:
|
|
157
|
+
body = {
|
|
158
|
+
"class" : "UpdateElementRequestBody",
|
|
159
|
+
"properties": {
|
|
160
|
+
"class" : "CollectionProperties",
|
|
161
|
+
"name" : name,
|
|
162
|
+
"description" : description,
|
|
163
|
+
"category": category
|
|
164
|
+
},
|
|
165
|
+
}
|
|
166
|
+
m_client.update_collection(collection_guid, body_slimmer(body))
|
|
167
|
+
|
|
168
|
+
click.echo(f"Updated glossary: {collection_guid}")
|
|
169
|
+
|
|
170
|
+
except (PyegeriaAPIException, PyegeriaClientException) as e:
|
|
171
|
+
print_basic_exception(e)
|
|
172
|
+
finally:
|
|
173
|
+
m_client.close_session()
|
|
174
|
+
|
|
175
|
+
@click.command("delete-collection")
|
|
176
|
+
@click.argument("collection-guid")
|
|
177
|
+
@click.option("--server", default=app_config.egeria_view_server, help="Egeria view server to use")
|
|
178
|
+
@click.option(
|
|
179
|
+
"--url", default=app_config.egeria_view_server_url, help="URL of Egeria platform to connect to"
|
|
180
|
+
)
|
|
181
|
+
@click.option("--userid", default=EGERIA_USER, help="Egeria user")
|
|
182
|
+
@click.option("--password", default=EGERIA_USER_PASSWORD, help="Egeria user password")
|
|
183
|
+
@click.option("--timeout", default=60, help="Number of seconds to wait")
|
|
184
|
+
|
|
185
|
+
def delete_collection(server, url, userid, password, timeout, collection_guid):
|
|
186
|
+
"""Delete the collection specified"""
|
|
187
|
+
m_client = EgeriaTech(server, url, user_id=userid, user_pwd=password)
|
|
188
|
+
token = m_client.create_egeria_bearer_token()
|
|
189
|
+
try:
|
|
190
|
+
m_client.delete_collection(collection_guid)
|
|
191
|
+
|
|
192
|
+
click.echo(f"Deleted collection: {collection_guid}")
|
|
193
|
+
|
|
194
|
+
except (PyegeriaAPIException, PyegeriaClientException) as e:
|
|
195
|
+
print_basic_exception(e)
|
|
196
|
+
finally:
|
|
197
|
+
m_client.close_session()
|
|
@@ -11,21 +11,31 @@ import os
|
|
|
11
11
|
import sys
|
|
12
12
|
import time
|
|
13
13
|
|
|
14
|
+
from pydantic import ValidationError
|
|
14
15
|
from rich import box
|
|
15
16
|
from rich.console import Console
|
|
16
17
|
from rich.markdown import Markdown
|
|
17
18
|
from rich.prompt import Prompt
|
|
18
19
|
from rich.table import Table
|
|
19
20
|
from rich.text import Text
|
|
21
|
+
from typing import List
|
|
22
|
+
from html import escape
|
|
23
|
+
try:
|
|
24
|
+
from markdown_it import MarkdownIt
|
|
25
|
+
except Exception:
|
|
26
|
+
MarkdownIt = None
|
|
20
27
|
|
|
21
28
|
from pyegeria import (
|
|
22
29
|
EgeriaTech,
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
PyegeriaException, print_basic_exception, print_validation_error,
|
|
31
|
+
)
|
|
32
|
+
from pyegeria.core._exceptions import (
|
|
33
|
+
PyegeriaInvalidParameterException,
|
|
34
|
+
PyegeriaAPIException as PropertyServerException,
|
|
35
|
+
PyegeriaUnauthorizedException as UserNotAuthorizedException,
|
|
36
|
+
)
|
|
37
|
+
# Default glossary GUID can be provided via environment; fall back to None
|
|
38
|
+
EGERIA_HOME_GLOSSARY_GUID = os.environ.get("EGERIA_HOME_GLOSSARY_GUID", None)
|
|
29
39
|
|
|
30
40
|
disable_ssl_warnings = True
|
|
31
41
|
|
|
@@ -48,6 +58,40 @@ EGERIA_ROOT_PATH = os.environ.get("EGERIA_ROOT_PATH", "../../")
|
|
|
48
58
|
EGERIA_INBOX_PATH = os.environ.get("EGERIA_INBOX_PATH", "md_processing/dr_egeria_inbox")
|
|
49
59
|
EGERIA_OUTBOX_PATH = os.environ.get("EGERIA_OUTBOX_PATH", "md_processing/dr_egeria_outbox")
|
|
50
60
|
|
|
61
|
+
def _get_console_width_from_config(default_width: int = EGERIA_WIDTH) -> int:
|
|
62
|
+
try:
|
|
63
|
+
from pyegeria.core.config import settings
|
|
64
|
+
return int(getattr(settings.Environment, "console_width", default_width) or default_width)
|
|
65
|
+
except Exception:
|
|
66
|
+
return default_width
|
|
67
|
+
|
|
68
|
+
def _get_outbox_dir() -> str:
|
|
69
|
+
root = os.environ.get("EGERIA_ROOT_PATH", EGERIA_ROOT_PATH)
|
|
70
|
+
out = os.environ.get("EGERIA_OUTBOX_PATH", EGERIA_OUTBOX_PATH)
|
|
71
|
+
return os.path.join(root, out)
|
|
72
|
+
|
|
73
|
+
def _md_to_html(md_text: str) -> str:
|
|
74
|
+
if not md_text:
|
|
75
|
+
return ""
|
|
76
|
+
if MarkdownIt is None:
|
|
77
|
+
return f"<pre>{escape(md_text)}</pre>"
|
|
78
|
+
try:
|
|
79
|
+
return MarkdownIt().render(md_text)
|
|
80
|
+
except Exception:
|
|
81
|
+
return f"<pre>{escape(md_text)}</pre>"
|
|
82
|
+
|
|
83
|
+
def _build_html_table(columns: List[str], rows: List[List[str]]) -> str:
|
|
84
|
+
ths = ''.join(f'<th>{escape(c)}</th>' for c in columns)
|
|
85
|
+
body_rows = []
|
|
86
|
+
for r in rows:
|
|
87
|
+
tds = []
|
|
88
|
+
for cell in r:
|
|
89
|
+
if isinstance(cell, str) and cell.lstrip().startswith('<table'):
|
|
90
|
+
tds.append(f"<td>{cell}</td>")
|
|
91
|
+
else:
|
|
92
|
+
tds.append(f"<td>{escape(cell or '')}</td>")
|
|
93
|
+
body_rows.append('<tr>' + ''.join(tds) + '</tr>')
|
|
94
|
+
return '<table>\n<thead><tr>' + ths + '</tr></thead>\n<tbody>\n' + "\n".join(body_rows) + '\n</tbody>\n</table>'
|
|
51
95
|
|
|
52
96
|
def display_command_terms(
|
|
53
97
|
search_string: str = "*",
|
|
@@ -60,6 +104,7 @@ def display_command_terms(
|
|
|
60
104
|
jupyter: bool = EGERIA_JUPYTER,
|
|
61
105
|
width: int = EGERIA_WIDTH,
|
|
62
106
|
output_format: str = "TABLE",
|
|
107
|
+
mode: str = "terminal",
|
|
63
108
|
):
|
|
64
109
|
"""Display a table of glossary terms filtered by search_string and glossary, if specified. If no
|
|
65
110
|
filters then all terms are displayed. If glossary_guid or name is specified, then only terms from that
|
|
@@ -98,26 +143,18 @@ def display_command_terms(
|
|
|
98
143
|
try:
|
|
99
144
|
g_client = EgeriaTech(view_server, view_url, user_id, user_pass)
|
|
100
145
|
token = g_client.create_egeria_bearer_token(user_id, user_pass)
|
|
101
|
-
|
|
102
|
-
glossary_guid = g_client.get_guid_for_name(glossary_name)
|
|
103
|
-
if glossary_guid == NO_GLOSSARIES_FOUND:
|
|
104
|
-
console.print(
|
|
105
|
-
f"\nThe glossary name {glossary_name} was not found. Please try using the glossary guid"
|
|
106
|
-
)
|
|
107
|
-
sys.exit(1)
|
|
108
|
-
elif (glossary_guid is not None) and (len(glossary_guid) < 10):
|
|
109
|
-
glossary_guid = None
|
|
146
|
+
|
|
110
147
|
|
|
111
148
|
if output_format == "LIST":
|
|
112
149
|
action = "LIST"
|
|
113
150
|
elif output_format == "REPORT":
|
|
114
151
|
action = "Report"
|
|
115
152
|
if output_format != "TABLE":
|
|
116
|
-
file_path =
|
|
153
|
+
file_path = _get_outbox_dir()
|
|
117
154
|
file_name = f"Command-Help-{time.strftime('%Y-%m-%d-%H-%M-%S')}-{action}.md"
|
|
118
155
|
full_file_path = os.path.join(file_path, file_name)
|
|
119
156
|
os.makedirs(os.path.dirname(full_file_path), exist_ok=True)
|
|
120
|
-
output = g_client.find_glossary_terms(search_string,
|
|
157
|
+
output = g_client.find_glossary_terms(search_string, output_format=output_format, report_spec="Help-Terms")
|
|
121
158
|
if output == "NO_TERMS_FOUND":
|
|
122
159
|
print(f"\n==> No commands found for search string '{search_string}'")
|
|
123
160
|
return
|
|
@@ -127,12 +164,13 @@ def display_command_terms(
|
|
|
127
164
|
return
|
|
128
165
|
|
|
129
166
|
except (
|
|
130
|
-
|
|
131
|
-
PropertyServerException,
|
|
132
|
-
UserNotAuthorizedException,
|
|
167
|
+
PyegeriaException
|
|
133
168
|
) as e:
|
|
134
|
-
|
|
135
|
-
|
|
169
|
+
print_basic_exception(e)
|
|
170
|
+
except ValidationError as e:
|
|
171
|
+
print_validation_error(e)
|
|
172
|
+
except Exception as e:
|
|
173
|
+
console.print_exception(e)
|
|
136
174
|
|
|
137
175
|
|
|
138
176
|
def generate_table(search_string: str, glossary_guid: str) -> Table:
|
|
@@ -156,25 +194,21 @@ def display_command_terms(
|
|
|
156
194
|
|
|
157
195
|
terms = g_client.find_glossary_terms(
|
|
158
196
|
search_string,
|
|
159
|
-
glossary_guid,
|
|
160
|
-
starts_with=False,
|
|
161
|
-
ends_with=False,
|
|
162
|
-
status_filter=[],
|
|
163
197
|
page_size=500,
|
|
164
198
|
)
|
|
165
199
|
|
|
166
|
-
if
|
|
200
|
+
if isinstance(terms, str):
|
|
167
201
|
print(f"No commands found - this was not the command you were looking for?! - {search_string} : {glossary_guid} ")
|
|
168
202
|
sys.exit(0)
|
|
169
203
|
sorted_terms = sorted(
|
|
170
|
-
terms, key=lambda k: k
|
|
204
|
+
terms, key=lambda k: (k.get("properties") or {}).get("displayName","---")
|
|
171
205
|
)
|
|
172
206
|
style = "bright_white on black"
|
|
173
207
|
if type(terms) is str:
|
|
174
208
|
return table
|
|
175
209
|
glossary_info = {}
|
|
176
210
|
for term in sorted_terms:
|
|
177
|
-
props = term.get("
|
|
211
|
+
props = term.get("properties", "None")
|
|
178
212
|
if props == "None":
|
|
179
213
|
return table
|
|
180
214
|
|
|
@@ -193,11 +227,9 @@ def display_command_terms(
|
|
|
193
227
|
usage = props.get("usage", "---")
|
|
194
228
|
# ex_us_out = Markdown(f"Example:\n{example}\n---\nUsage: \n{usage}")
|
|
195
229
|
|
|
196
|
-
classifications = term["elementHeader"]
|
|
230
|
+
classifications = term["elementHeader"].get("classifications",None)
|
|
197
231
|
glossary_guid = None
|
|
198
|
-
|
|
199
|
-
if c["classificationName"] == "Anchors":
|
|
200
|
-
glossary_guid = c["classificationProperties"]["anchorScopeGUID"]
|
|
232
|
+
|
|
201
233
|
|
|
202
234
|
if glossary_guid and glossary_guid in glossary_info:
|
|
203
235
|
glossary_name = glossary_info[glossary_guid]
|
|
@@ -218,16 +250,77 @@ def display_command_terms(
|
|
|
218
250
|
Markdown(usage),
|
|
219
251
|
style="bold white on black",
|
|
220
252
|
)
|
|
253
|
+
if not classifications:
|
|
254
|
+
continue
|
|
255
|
+
for c in classifications:
|
|
256
|
+
if c["classificationName"] == "Anchors":
|
|
257
|
+
glossary_guid = c["classificationProperties"]["anchorScopeGUID"]
|
|
221
258
|
|
|
222
259
|
g_client.close_session()
|
|
223
260
|
return table
|
|
224
261
|
|
|
262
|
+
# Shared fetch for md modes
|
|
263
|
+
if mode in ("md", "md-html"):
|
|
264
|
+
try:
|
|
265
|
+
terms = g_client.find_glossary_terms(search_string, page_size=500)
|
|
266
|
+
except Exception:
|
|
267
|
+
terms = []
|
|
268
|
+
if isinstance(terms, str) and terms == "NO_TERMS_FOUND":
|
|
269
|
+
print(f"\n==> No commands found for search string '{search_string}'")
|
|
270
|
+
return
|
|
271
|
+
# Build outputs
|
|
272
|
+
out_dir = _get_outbox_dir()
|
|
273
|
+
os.makedirs(out_dir, exist_ok=True)
|
|
274
|
+
stamp = time.strftime('%Y-%m-%d-%H-%M-%S')
|
|
275
|
+
if mode == "md":
|
|
276
|
+
# Simple sections per term
|
|
277
|
+
lines: List[str] = []
|
|
278
|
+
lines.append(f"# Dr.Egeria Commands (search: `{search_string}`)")
|
|
279
|
+
lines.append("")
|
|
280
|
+
sorted_terms = sorted(terms, key=lambda t: (t.get("properties") or {}).get("displayName", "---"))
|
|
281
|
+
for term in sorted_terms:
|
|
282
|
+
props = term.get("properties") or {}
|
|
283
|
+
name = props.get("displayName", "---") or "---"
|
|
284
|
+
desc = props.get("description", "") or ""
|
|
285
|
+
usage = props.get("usage", "") or ""
|
|
286
|
+
lines.append(f"## {name}")
|
|
287
|
+
lines.append("")
|
|
288
|
+
lines.append("### Description\n")
|
|
289
|
+
lines.append(desc if desc.strip() else "_No description_")
|
|
290
|
+
lines.append("")
|
|
291
|
+
if usage.strip():
|
|
292
|
+
lines.append("### Usage\n")
|
|
293
|
+
lines.append(usage)
|
|
294
|
+
lines.append("")
|
|
295
|
+
lines.append("---\n")
|
|
296
|
+
content = "\n".join(lines)
|
|
297
|
+
file_name = f"Command-Help-{stamp}-md.md"
|
|
298
|
+
else:
|
|
299
|
+
# md-html nested tables
|
|
300
|
+
columns = ["Command", "Description", "Usage"]
|
|
301
|
+
rows: List[List[str]] = []
|
|
302
|
+
sorted_terms = sorted(terms, key=lambda t: (t.get("properties") or {}).get("displayName", "---"))
|
|
303
|
+
for term in sorted_terms:
|
|
304
|
+
props = term.get("properties") or {}
|
|
305
|
+
name = props.get("displayName", "---") or "---"
|
|
306
|
+
desc = props.get("description", "") or ""
|
|
307
|
+
usage_md = props.get("usage", "") or ""
|
|
308
|
+
usage_html = _md_to_html(usage_md).strip()
|
|
309
|
+
rows.append([name, desc, usage_html])
|
|
310
|
+
content = f"# Dr.Egeria Commands (search: `{search_string}`)\n\n" + _build_html_table(columns, rows) + "\n"
|
|
311
|
+
file_name = f"Command-Help-{stamp}-md-html.md"
|
|
312
|
+
full_file_path = os.path.join(out_dir, file_name)
|
|
313
|
+
with open(full_file_path, 'w', encoding='utf-8') as f:
|
|
314
|
+
f.write(content)
|
|
315
|
+
print(f"\n==> Help written to {full_file_path}")
|
|
316
|
+
return
|
|
317
|
+
|
|
225
318
|
try:
|
|
226
319
|
with console.pager(styles=True):
|
|
227
320
|
console.print(generate_table(search_string, glossary_guid))
|
|
228
321
|
|
|
229
322
|
except (
|
|
230
|
-
|
|
323
|
+
PyegeriaInvalidParameterException,
|
|
231
324
|
PropertyServerException,
|
|
232
325
|
UserNotAuthorizedException,
|
|
233
326
|
) as e:
|
|
@@ -242,6 +335,8 @@ def main():
|
|
|
242
335
|
parser.add_argument("--userid", help="User Id")
|
|
243
336
|
parser.add_argument("--password", help="User Password")
|
|
244
337
|
parser.add_argument("--guid", help="GUID of glossary to search")
|
|
338
|
+
parser.add_argument("--mode", choices=["terminal","md","md-html"], default="terminal", help="Output mode: terminal (default) prints Rich table; md writes Markdown; md-html writes Markdown with HTML tables.")
|
|
339
|
+
parser.add_argument("--search", help="Search string for commands", default=None)
|
|
245
340
|
|
|
246
341
|
args = parser.parse_args()
|
|
247
342
|
|
|
@@ -254,13 +349,17 @@ def main():
|
|
|
254
349
|
guid = args.guid if args.guid is not None else EGERIA_HOME_GLOSSARY_GUID
|
|
255
350
|
|
|
256
351
|
try:
|
|
257
|
-
|
|
352
|
+
search_default = args.search or "*"
|
|
353
|
+
search_string = args.search or Prompt.ask("Enter the command you are searching for:", default=search_default)
|
|
258
354
|
|
|
259
|
-
|
|
355
|
+
if args.mode == "terminal":
|
|
356
|
+
output_format = Prompt.ask("What output format do you want?", choices=["TABLE", "LIST", "REPORT"], default="TABLE")
|
|
357
|
+
else:
|
|
358
|
+
output_format = "TABLE"
|
|
260
359
|
|
|
261
360
|
display_command_terms(
|
|
262
|
-
|
|
263
|
-
userid, user_pass, output_format=
|
|
361
|
+
search_string, guid, 'Egeria-Markdown', server, url,
|
|
362
|
+
userid, user_pass, output_format=output_format, mode=args.mode
|
|
264
363
|
)
|
|
265
364
|
|
|
266
365
|
except KeyboardInterrupt:
|
|
@@ -8,13 +8,13 @@ from rich import print
|
|
|
8
8
|
from rich.console import Console
|
|
9
9
|
|
|
10
10
|
from pyegeria.egeria_tech_client import EgeriaTech
|
|
11
|
-
from pyegeria.md_processing_utils import (extract_command, process_glossary_upsert_command, process_term_upsert_command,
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
from pyegeria.view.md_processing_utils import (extract_command, process_glossary_upsert_command, process_term_upsert_command,
|
|
12
|
+
get_current_datetime_string, process_per_proj_upsert_command, command_list,
|
|
13
|
+
)
|
|
14
14
|
import click
|
|
15
15
|
|
|
16
|
-
from pyegeria._exceptions import (
|
|
17
|
-
|
|
16
|
+
from pyegeria.core._exceptions import (
|
|
17
|
+
print_basic_exception, PyegeriaException,
|
|
18
18
|
)
|
|
19
19
|
|
|
20
20
|
EGERIA_METADATA_STORE = os.environ.get("EGERIA_METADATA_STORE", "active-metadata-store")
|
|
@@ -113,8 +113,8 @@ def process_jupyter_notebook(
|
|
|
113
113
|
else:
|
|
114
114
|
click.echo("\nNo updates detected. New file not created.")
|
|
115
115
|
|
|
116
|
-
except
|
|
117
|
-
|
|
116
|
+
except PyegeriaException as e:
|
|
117
|
+
print_basic_exception(e)
|
|
118
118
|
return
|
|
119
119
|
|
|
120
120
|
|